# Python 文件读写


# 打开文件
# 语法：open(file, mode)
# 常用参数：
# file：文件名，可以是相对路径或绝对路径
# mode：打开模式，'r'表示读，'w'表示写，'a'表示追加，'rb'表示以二进制读，'wb'表示以二进制写，'ab'表示以二进制追加
# encoding：指定编码格式，如'utf-8'，'gbk'等
# errors：指定错误处理方案，如'strict'，'ignore'等

# 文件打开模式
# 'r'：读模式，文件指针指向开头，默认模式
# 'r+'：读写模式，文件指针指向开头，可以读写文件内容
# 'w'：写模式，文件指针指向开头，如果文件不存在则创建，如果文件存在则覆盖原文件内容
# 'w+'：读写模式，文件指针指向开头，如果文件不存在则创建，如果文件存在则覆盖原文件内容
# 'a'：追加模式，如果该文件已存在，文件指针将会放在文件的结尾。也就是说，新的内容将会被写入到已有内容之后。如果该文件不存在，创建新文件进行写入。
# 'a+'：读写模式，打开一个文件用于读写。如果该文件已存在，文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在，创建新文件用于读写。
# 'rb'：读模式，以二进制读模式打开文件,文件指针将会放在文件的开头
# 'rb+'：读写模式，以二进制读写模式打开文件,文件指针将会放在文件的开头
# 'wb'：写模式，以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。
# 'wb+'：读写模式，以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。
# 'ab'：追加模式，以二进制格式打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。也就是说，新的内容将会被写入到已有内容之后。如果该文件不存在，创建新文件进行写入。
# 'ab+': 追加模式，以二进制格式打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。如果该文件不存在，创建新文件用于读写。


# 以读方式打开文件
# f = open('D:\PyCharmProjects\python-demo\\no_09_io\\test.txt', 'r', encoding='utf-8')

# 读取文件全部内容
# content = f.read()
# print(content)


# 文件对象的常用方法
# read()：读取文件全部内容，返回字符串
# readline()：读取文件一行内容，返回字符串
# readlines()：读取文件所有内容，返回列表，每个元素代表一行内容
# write()：向文件写入内容，返回写入的字符数
# close()：关闭文件
# flush()：刷新文件内部缓冲区，直接把内部缓冲区的数据立刻写入文件，而不是被动的等待输出缓冲区写入。
# tell()：返回文件当前位置，以字符为单位
# seek(offset, from_what=0)：移动文件读取指针到指定位置
# isatty()：如果文件连接到一个终端设备返回True，否则返回False
# truncate(size=None)：截断文件，截断文件到给定大小size，size为None时，截断文件到当前位置。返回截断后的文件大小。

try:
    file = open('D:\PyCharmProjects\python-demo\\no_09_io\\test.txt', 'r', encoding='utf-8')
    # 读取文件一行内容
    print(file.readline())
finally:
    # 关闭文件
    file.close()

# 读取文件全部内容返回列表
try:
    file = open('D:\PyCharmProjects\python-demo\\no_09_io\\test.txt', 'r', encoding='utf-8')
    # 读取文件全部内容
    lines = file.readlines()
    for line in lines:
        # strip()：去除每行末尾的换行符
        print(line.strip())
finally:
    # 关闭文件
    file.close()

# 使用with语句自动关闭文件
with open('D:\PyCharmProjects\python-demo\\no_09_io\\test.txt', 'r', encoding='utf-8') as file:
    # 读取文件全部内容
    content = file.read()
    print(content)

# 写入文件
try:
    file = open('D:\PyCharmProjects\python-demo\\no_09_io\\test.txt', 'a', encoding='utf-8')
    # 写入一行内容
    file.write('fffffffffffffffffff\n')
finally:
    # 关闭文件
    file.close()